<?php

namespace app\teacher\controller;

use app\admin\model\Admin;
use think\Cache;
use think\Controller;
use think\Request;
use app\admin\model\classes\Teacher;

class Base extends Controller
{

    public $noNeddLogin = ['login', 'register', 'send_code'];
    protected $user = [];
    protected $uid = 0;

    public function __construct(){
        parent::__construct();
        $token = $this->request->header('token');
        if (!$this->match($this->noNeddLogin)) {
            $this->checkToken($token);
        }
    }

    public function checkToken($token)
    {
        //需要权限验证
        $this->uid = Cache::get($token);
        if (!$this->uid) $this->error('请登录后使用');

        $this->user = Admin::where('id', $this->uid)->where('status', 'normal')->find();
        if (!$this->user) $this->error('无效用户');
        return true;
    }

    public function teacher_id(){
        return Teacher::where(['user_id'=>$this->uid])->value('profile_id');
    }

    public function user()
    {
        return $this->user??null;
    }

    public function uid()
    {
        return $this->uid??0;
    }

    public function match($arr = [])
    {
        $arr = is_array($arr) ? $arr : explode(',', $arr);
        if (!$arr) {
            return false;
        }

        $arr = array_map('strtolower', $arr);
        // 是否存在
        if (in_array(strtolower($this->request->action()), $arr) || in_array('*', $arr)) {
            return true;
        }

        // 没找到匹配
        return false;
    }

    /**
     * 操作成功返回的数据
     * @param string $msg    提示信息
     * @param mixed  $data   要返回的数据
     * @param int    $code   错误码，默认为1
     * @param string $type   输出类型
     * @param array  $header 发送的 Header 信息
     */
    protected function success($msg = '', $data = null, $code = 1, $type = 'json', array $header = [])
    {
        $this->result($data, $code, $msg, $type, $header);
    }

    /**
     * 操作失败返回的数据
     * @param string $msg    提示信息
     * @param mixed  $data   要返回的数据
     * @param int    $code   错误码，默认为0
     * @param string $type   输出类型
     * @param array  $header 发送的 Header 信息
     */
    protected function error($msg = '', $data = null, $code = 0, $type = 'json', array $header = [])
    {
        $this->result($data, $code, $msg, $type, $header);
    }

}